package com.cjkj.system.mapper;

import com.cjkj.system.domain.TPatVisit;
import com.cjkj.system.domain.dto.PatVisitReq;
import com.cjkj.system.domain.dto.PatientEditInfoReq;
import com.cjkj.system.domain.vo.*;
import org.apache.ibatis.annotations.Param;

import java.util.Date;
import java.util.List;

/**
 * 患者就诊记录Mapper接口
 * 
 * @author cjkj
 * @date 2024-08-30
 */
public interface TPatVisitMapper 
{
    /**
     * 查询患者就诊记录列表
     *
     * @param req 查询条件
     * @return 患者就诊记录集合
     */
    List<PatVisitListVo> selectTPatVisitList(PatVisitReq req);
    List<PatVisitSimpleVo> selectVisitSimpleList(PatVisitReq req);
    List<PatVisitListVo> selectAllList(PatVisitReq req);
    List<TPatVisit> selectList(TPatVisit visit);
    List<PatientDetailInfoVo> selectScreenPatientList(@Param("hospitalId") String hospitalId,
                                                    @Param("deptId") String deptId,
                                                    @Param("keyWord") String keyWord,
                                                    @Param("dataType") String dataType);
    /** 用作整点护理数据接口中，查询就诊患者 */
    List<TPatVisit> selectListToCalculateHourlyData(@Param("hospitalId") String hospitalId,
                                                    @Param("deptId") String deptId,
                                                    @Param("visitStatus") String visitStatus,
                                                    @Param("nursingDay") String nursingDay);

    /**
     * 查询患者就诊记录
     * 
     * @param visitNo 患者就诊记录主键
     * @return 患者就诊记录
     */
    TPatVisit selectTPatVisitByVisitNo(Long visitNo);

    /**
     * 新增患者就诊记录
     * 
     * @param tPatVisit 患者就诊记录
     * @return 结果
     */
    int insertTPatVisit(TPatVisit tPatVisit);

    PatientEditInfoReq selectPatientEditInfoByVisitNo(Long visitNo);
    PatientDetailInfoVo getDetailInfo(Long visitNo);

    /**
     * 修改患者就诊记录
     * 
     * @param tPatVisit 患者就诊记录
     * @return 结果
     */
    int updateTPatVisit(TPatVisit tPatVisit);

    /**
     * 修改就诊状态
     * @param tPatVisit
     * @return
     */
    int updateTPatVisitStatus(TPatVisit tPatVisit);

    /**
     * 删除患者就诊记录
     * 
     * @param visitNo 患者就诊记录主键
     * @return 结果
     */
    int deleteTPatVisitByVisitNo(Long visitNo);

    TPatVisit selectByPatientIdAndHospitalId(@Param("patientId") Long patientId,
                                             @Param("hospitalId") String hospitalId,
                                             @Param("visitStatus") String visitStatus,
                                             @Param("dataType") String dataType);

    List<TPatVisit> selectByDoctorId(@Param("doctorId") String doctorId,
                                     @Param("dataType") String dataType,
                                     @Param("visitStatus") String visitStatus);

    List<PatVisitUsageVo> selectUsageData(@Param("hospitalId") String hospitalId, @Param("deptId") String deptId);

    List<PatVisitHistoryVo> selectRecordsByPatient(@Param("patientId") Long patientId,
                                                   @Param("startTime") Date startTime,
                                                   @Param("endTime") Date endTime,
                                                   @Param("dataType") String dataType);

    TPatVisit selectLastVisitRecordByPatientId(@Param("patientId") Long patientId);

}
